factoring higher degree polynomials